/*

*/

#include <string>
#include <iostream>
#include <stdlib.h>
#include "main.hpp"
#include "../logger/logger.hpp"


int main (int argc, char *argv[]) {

	Logger logger;
	Administrator admin;

	//Validacion de cantidad de parametros
	if(argc < 6)
	{
		printf("La cantidad de parametros es incorrecta.\nproyectoVienna <archvoVertices> <camposDeVertice> <archivoAristas> <camposDeAristas> <archivoLog> <archivoConfiguracion>");
		return 1;
	}
	else
	{
		std::string argv1 = argv[1];
		std::string argv3 = argv[3];
		std::string argv5 = argv[5];
		std::string argv6 = argv[6];

		logger.open(argv5);
		admin.create(argv1,argv3,argv6,atol(argv[2]),atoi(argv[4]),&logger);
	}

	int option;

	do
	{
		admin.cleanBestPathValues();
		std::string entry;

		do
		{
			printf("\n\nDesea : \n1 - Buscar el camino mas Rapido.\n2 - Buscar el camino mas Corto.\n9 - Salir\n");
			std::cin >> entry;
			option = atoi(entry.c_str());
		}
		while((option!=1) && (option!=2) && (option!=9));


		if(option==9)
		{
			return 0;
		}
		else
		{
			int priority=0;
			if(option==1)
			{
				priority=1;
			}
			else
			{
				priority=0;
			}

			std::string idNodoOrigen;
			std::string idNodoDestino;

			printf("Ingrese el ID del nodo Origen\n");
			std::cin >> idNodoOrigen;

			printf("Ingrese el ID del nodo Destino\n");
			std::cin >> idNodoDestino;


			int searchResult = admin.searchPath(idNodoOrigen,idNodoDestino,priority);

			switch(searchResult)
			{
			case 1 :
				printf("El camino ha sido encontrado:\n");
				printf("%s\n\n",admin.getPath().c_str());
				break;
			case 0 :
				printf("No se ha podido encontrar el camino\nPor favor revise los logs para mayor detalle.\nProbablemente los nodos no sean conectados entre si.\n");
				break;
			case -1:
				printf("Ha ocurrido un error :\n");
				switch(admin.getErrorCode())
				{
				case 10:
					printf("Nodo Origen Inexistente\n");
					break;
				case 20:
					printf("Nodo Destino Inexistente\n");
					break;
				}

			}
		
		}
		
	}
	while(option!=9);
}
